package com.sywl.web.taglib;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * html过滤
 * 网站里面经常会用到可视化编辑器
 * 编辑器往往会生成html代码，并将内容插入到各种标签里面
 * 假如我们需要获取内容中的某一部分，直接截取字符串是行不通的
 * 因为直接截取会照成各种html标签不闭合，导致整个网页变形
 * 此时只需要将含有html标签的字符串进行过滤，使其只剩下没有html标签的字符串
 * 然后再进行截取字符串就行了
 * 作为 el 函数库使用
 * @author 林超
 */
public class HtmlFunction {
	
	/**
	 * 过滤html标签，返回被过滤后的字符串
	 * @param htmlStr
	 * @return
	 */
	public static String filterHtml(String htmlStr) {
        String textStr = "";
        Pattern p_script;
        Matcher m_script;
        Pattern p_html;
        Matcher m_html;
        try {
            String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
            String regEx_script = "<[/s]*?script[^>]*?>[/s/S]*?<[/s]*?//[/s]*?script[/s]*?>"; // 定义script的正则表达式{或<script[^>]*?>[/s/S]*?<//script>
            p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
            m_script = p_script.matcher(htmlStr);
            htmlStr = m_script.replaceAll(""); // 过滤script标签
            p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
            m_html = p_html.matcher(htmlStr);
            htmlStr = m_html.replaceAll(""); // 过滤html标签
            textStr = htmlStr;
        } catch (Exception e) {
            System.err.println("Html2Text: " + e.getMessage());
        }
        return textStr;// 返回文本字符串
	}
	
	/**
	 * 过滤Html标签，并指定从什么位置开始返回字符串
	 * @param htmlStr
	 * @param begin
	 * @return
	 */
	public static String filterHtml(String htmlStr, int begin) {
		String str = filterHtml(htmlStr);
		if(begin > str.length() || begin < 0) {
			begin = 0;
		}
		return str.substring(begin);
	}
	
	/**
	 * 过滤Html标签，并指定返回字符串的开始位置与结束位置
	 * @param htmlStr
	 * @param begin
	 * @param end
	 * @return
	 */
	public static String filterHtml(String htmlStr, int begin, int end) {
		String str = filterHtml(htmlStr);
		if(begin > str.length() || begin < 0) {
			begin = 0;
		}
		if(end > str.length() || end < 0) {
			end = str.length();
		}
		return str.substring(begin, end - 1);
	}
}
